home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 108_01 / bigdir.c < prev    next >
Text File  |  1985-11-13  |  2KB  |  75 lines

  1. /*
  2.     BIG DIRECTORY PROGRAM
  3.     Written by Richard Damon
  4.     Version 1.0 May 1980
  5.  
  6. Usage:
  7.  
  8. A>BIGDIR d
  9.  
  10.     Where d is a drive specifier (A,B,C,D, default is current drive)
  11. Prints out a directory listing similar to stat but formatted to fit on a
  12. 24 x 80 display.
  13. */
  14.  
  15. main(argc,argv)
  16. int argc;
  17. char *argv[];
  18. {
  19.     struct fcb{
  20.         char drive;
  21.         char name[11];
  22.         char extent;
  23.         char dummy[2];
  24.         char rc;
  25.         char diskmap[16];
  26.     } directory[64];
  27.     char nr;
  28.     int i,j,k,totalblocks,ex,fun,comp(),sdrive;
  29.     char *pntr;
  30.     sdrive=bdos(25,0);
  31.     if(argc>1){
  32.         ++argv;
  33.         bdos(14,toupper(**argv)-'A');
  34.     }
  35.     k=1;
  36.     bios(10,2);
  37.     for(i=0;i<16;i++){
  38.         bios(11,k);
  39.         bios(12,&directory[i*4]);
  40.         bios(13);
  41.         k+=6;
  42.         if(k>26)k-=26;
  43.         if(k==1)k=2;
  44.     }
  45.     qsort(directory,64,32,comp);
  46.     for(i=0;i<3;i++)
  47.         printf("Filename.ext   NR  K    ");
  48.     totalblock=0;
  49.     for(j=0;!directory[j].drive;j++){
  50.         if(j%3 == 0) putchar('\n');
  51.         ex=directory[j].extent;
  52.         nr=directory[j].rc;
  53.         directory[j].dummy[0]=0;
  54.         for(k=10;k>7;k--)
  55.             directory[j].name[k+1]=directory[j].name[k];
  56.         directory[j].name[8]='.';
  57.         totalblock+=(nr+7)/8;
  58.         printf("%s",directory[j].name);
  59.         if(ex==0) printf("  ");
  60.             else printf("/%x",ex);
  61.         printf(" %2x %2d  %c ",nr,(nr+7)/8,j%3==2 ? ' ': '|');
  62.     }
  63.     printf("\nUsage= %d Blocks In %d Extents.  Left %d Blocks and %d Extents",totalblocks,j,241-totalblocks,64-j);
  64.     bdos(14,sdrive);
  65. }
  66. comp(x,y)
  67. char *x,*y;
  68. {
  69.     char i;
  70.     for(i=1 ; (i || *x) && *x!=0xE5 && *x==*y ;x++,y++,i=0);
  71.     if(*x>*y) return 1;
  72.     if(*x<*y) return -1;
  73.     return 0;
  74. }
  75.